# 导入蓝图对象
from flask import g, redirect, render_template, jsonify, request, current_app, session

from info import db, constants
from info.utils.commons import login_required
from info.utils.response_code import RET
from . import profile_blue
# from info.utils.image_storage import storage


@profile_blue.route('/info')
@login_required
def user_info():
    user = g.user
    # 如果用户未登录，重定向到项目首页
    if not user:
        return redirect('/')
    data = {
        'user_info':user.to_dict()
    }
    # 如果用户已登录加载模板页面
    return render_template('news/user.html',data=data)



@profile_blue.route("/base_info",methods=['GET','POST'])
@login_required
def base_info():
    """
    用户信息的展示和修改
    1、如果是post请求
    2、获取参数，nick_name,signature,gender
    3、检查参数的完整性
    4、检查gender是MAN或者是WOMAN
    5、保存用户信息
    6、提交数据
    7、返回结果

    :return:
    """
    # 尝试获取用户信息
    print(111)
    user = g.user
    if not user:
        return jsonify(errno=RET.SESSIONERR,errmsg='用户未登录')
    # 如果是get请求，直接加载模板文件,传入用户基本数据
    if request.method == 'GET':
        data = {
            'user_info':user.to_dict()
        }
        print(222)
        return render_template('news/user_base_info.html',data=data)
    else:
        print(333)
        # 获取参数
        nick_name = request.json.get('nick_name')
        signature = request.json.get('signature')
        gender = request.json.get('gender')
        # 检查参数的完整性
        print(444)
        if not all([nick_name,signature,gender]):
            return jsonify(errno=RET.PARAMERR,errmsg='参数缺失')
        # 检查性别
        if gender not in ['MAN','WOMAN']:
            return jsonify(errno=RET.PARAMERR,errmsg='参数格式错误')
        # 保存用户信息
        user.nick_name = nick_name
        user.signature = signature
        user.gender = gender
        print(123)
        # 提交数据
        try:
            db.session.add(user)
            db.session.commit()
        except Exception as e:
            current_app.logger.error(e)
            db.session.rollback()
            return jsonify(errno=RET.DBERR,errmsg='保存数据失败')

        # 修改redis中缓存的用户昵称信息
        session['nick_name'] = nick_name
        # 返回结果
        return jsonify(errno=RET.OK,errmsg='OK')

# @profile_blue.route('/pic_info',methods=['GET','POST'])
# @login_required
# def save_avatar_url():
#     """
#     保存用户头像
#     1、尝试获取用户的登录信息
#     2、如果是get请求，加载模板
#     3、获取参数，表单提交
#     4、校验参数的存在
#     5、读取文件对象，read
#     6、调用七牛云，上传用户头像
#     7、保存头像数据到mysql数据库中，只存头像的相对路径，七牛云返回的图片名称
#     8、拼接图片的绝对路径：七牛的外链域名 + 七牛云返回的图片名称key
#     9、返回结果
#
#     :return:
#     """
#     user = g.user
#     if not user:
#         return jsonify(errno=RET.SESSIONERR,errmsg='用户未登录')
#     if request.method == 'GET':
#         data = {
#             'user_info':user.to_dict()
#         }
#         return render_template('news/user_pic_info.html',data=data)
#     # 获取post请求的表单的name名称，不是ajax中的data数据
#     avatar = request.files.get('avatar')
#     if not avatar:
#         return jsonify(errno=RET.PARAMERR,errmsg='参数不存在')
#     # 读取图片数据
#     try:
#         image_data = avatar.read()
#     except Exception as e:
#         current_app.logger.error(e)
#         return jsonify(errno=RET.DATAERR,errmsg='参数格式错误')
#     # 调用七牛云，上传图片
#     try:
#         image_name = storage(image_data)
#     except Exception as e:
#         current_app.logger.error(e)
#         return jsonify(errno=RET.THIRDERR,errmsg='上传图片失败')
#     # 保存图片文件的相对路径到mysql数据库中
#     user.avatar_url = image_name
#     try:
#         db.session.add(user)
#         db.session.commit()
#     except Exception as e:
#         current_app.logger.error(e)
#         db.session.rollback()
#         return jsonify(errno=RET.DBERR,errmsg='保存数据失败')
#     # 拼接图片的绝对路径
#     image_url = constants.QINIU_DOMIN_PREFIX + image_name
#     data = {
#         'avatar_url':image_url
#     }
#     # return jsonify(errno=RET.OK,errmsg='OK',data={'avatar_url':image_url})
#     return jsonify(errno=RET.OK,errmsg='OK',data=data)





